#ifndef _KB_RGB_INT_EFFECT_H_
#define _KB_RGB_INT_EFFECT_H_

#include "kbRGB_Int.h"

#ifdef __cplusplus
extern "C" {
#endif

/*************************************************************************************************\
|        cledMatrix [13]                                                                            |
\*************************************************************************************************/
extern void mled_view_kb_Init(struct kbRGB_Int_Params *const params);
extern void mled_view_ripple(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);
extern void mled_view_cnt(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);
extern void mled_view_Crater(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);  // 火山口
extern void mled_view_EyeofSauron(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);  // 索伦之眼
/*************************************************************************************************\
|        Advanced [13]                                                                            |
\*************************************************************************************************/
//effect = new BouncingBallEffect();      // 弹力球
//effect = new Bubbles();                 // 气泡
//effect = new FractalMotion();           // 分形运动
//effect = new GradientWave();            // 梯度波
//effect = new MovingPanes();             // 移动窗格
//effect = new Rain();                    // 下雨
//effect = new SmoothBlink();             // 平滑闪烁
//effect = new Spiral();                  // 螺旋
//effect = new StarryNight();             // 星空
//effect = new Sunrise();                 // 日出   // Fail
//effect = new SwirlCircles();            // 漩涡圈
//effect = new Wavy();                    // 波形的
//effect = new ZigZag();                  // 之字形的
extern void kbRGB_Int_BouncingBallEffect_Init(struct kbRGB_Int_Params *const params); // 弹力球
extern void kbRGB_Int_BouncingBallEffect(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params); // 弹力球
extern void kbRGB_Int_Bubbles_Init(struct kbRGB_Int_Params *const params);            // 气泡
extern void kbRGB_Int_Bubbles(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);            // 气泡
extern void kbRGB_Int_FractalMotion_Init(struct kbRGB_Int_Params *const params);      // 分形运动
extern void kbRGB_Int_FractalMotion(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);      // 分形运动
extern void kbRGB_Int_Sinusoid_Init(struct kbRGB_Int_Params *const params);           // 正弦曲线
extern void kbRGB_Int_Sinusoid(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);           // 正弦曲线
//extern void kbRGB_Int_DoubleSinusoid_Init(struct kbRGB_Int_Params *const params);     // 双正弦曲线
extern void kbRGB_Int_SingleSinusoid(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);     // 单正弦曲线
extern void kbRGB_Int_DoubleSinusoid(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);     // 双正弦曲线
extern void kbRGB_Int_GradientWave_Init(struct kbRGB_Int_Params *const params);       // 梯度波
extern void kbRGB_Int_GradientWave(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);       // 梯度波
extern void kbRGB_Int_MovingPanes_Init(struct kbRGB_Int_Params *const params);        // 移动窗格
extern void kbRGB_Int_MovingPanes(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);        // 移动窗格
extern void kbRGB_Int_Rain_Init(struct kbRGB_Int_Params *const params);               // 下雨
extern void kbRGB_Int_Rain(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);               // 下雨
extern void kbRGB_Int_SmoothBlink_Init(struct kbRGB_Int_Params *const params);        // 平滑闪烁
extern void kbRGB_Int_SmoothBlink(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);        // 平滑闪烁
extern void kbRGB_Int_Spiral_Init(struct kbRGB_Int_Params *const params);             // 螺旋效果
extern void kbRGB_Int_Spiral(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);             // 螺旋效果
extern void kbRGB_Int_Winnower(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);           // 风车效果
extern void kbRGB_Int_StarryNight_Init(struct kbRGB_Int_Params *const params);        // 星空
extern void kbRGB_Int_StarryNight(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);        // 星空
extern void kbRGB_Int_Sunrise_Init(struct kbRGB_Int_Params *const params);            // 日出   // Fail
extern void kbRGB_Int_Sunrise(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);            // 日出   // Fail
extern void kbRGB_Int_SwirlCircles_Init(struct kbRGB_Int_Params *const params);       // 漩涡圈
extern void kbRGB_Int_SwirlCircles(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);       // 漩涡圈
extern void kbRGB_Int_Wavy_Init(struct kbRGB_Int_Params *const params);               // 波形的
extern void kbRGB_Int_Wavy(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);               // 波形的
extern void kbRGB_Int_ZigZag_Init(struct kbRGB_Int_Params *const params);             // 之字形的
extern void kbRGB_Int_ZigZag(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);             // 之字形的

/*************************************************************************************************\
|        Beams [2]                                                                                |
\*************************************************************************************************/
//effect = new CrossingBeams();           // 交叉梁
//effect = new RotatingBeam();            // 旋转射束
extern void kbRGB_Int_CrossingBeams_Init(struct kbRGB_Int_Params *const params);      // 交叉梁
extern void kbRGB_Int_CrossingBeams(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);      // 交叉梁
extern void kbRGB_Int_RotatingBeam_Init(struct kbRGB_Int_Params *const params);       // 旋转射束
extern void kbRGB_Int_RotatingBeam(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);       // 旋转射束

/*************************************************************************************************\
|        Rainbow [9]                                                                              |
\*************************************************************************************************/
//effect = new ColorWheelEffect();        // 色轮
//effect = new CustomGradientWave();      // 自定义梯度波
//effect = new DoubleRotatingRainbow();   // 双旋转彩虹
//effect = new Hypnotoad();               //
//effect = new NoiseMap();                // 噪声地图
//effect = new RadialRainbow();           // 径向彩虹
//effect = new RainbowWave();             // 彩虹波
//effect = new RotatingRainbow();         // 旋转的彩虹
//effect = new SpectrumCycling();         // 光谱骑自行车
extern void kbRGB_Int_ColorWheel_Init(struct kbRGB_Int_Params *const params);        // 色轮
extern void kbRGB_Int_ColorWheel(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);         // 色轮
//extern void CustomGradientWave_Init(void);         // 自定义梯度波   // Fail
//extern void CustomGradientWave(const uint16_t cols, const uint16_t rows);     // 自定义梯度波   // Fail
extern void kbRGB_Int_DoubleRotatingRainbow_Init(struct kbRGB_Int_Params *const params);        // 双旋转彩虹
extern void kbRGB_Int_DoubleRotatingRainbow(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params); // 双旋转彩虹
extern void kbRGB_Int_Hypnotoad_Init(struct kbRGB_Int_Params *const params);                  // Hypnotoad
extern void kbRGB_Int_Hypnotoad(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);          // Hypnotoad
extern void kbRGB_Int_NoiseMap_Init(struct kbRGB_Int_Params *const params);                   // 噪声地图
extern void kbRGB_Int_NoiseMap(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);           // 噪声地图
extern void kbRGB_Int_NoiseCircle_Init(struct kbRGB_Int_Params *const params);                // 噪声地图
extern void kbRGB_Int_NoiseCircle(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);        // 噪声地图
extern void kbRGB_Int_RadialRainbow_Init(struct kbRGB_Int_Params *const params);                // 径向彩虹
extern void kbRGB_Int_RadialRainbow(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);      // 径向彩虹
extern void kbRGB_Int_RainbowWave_Init(struct kbRGB_Int_Params *const params);                  // 彩虹波
extern void kbRGB_Int_RainbowWave(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);        // 彩虹波
extern void kbRGB_Int_RotatingRainbow_Init(struct kbRGB_Int_Params *const params);              // 旋转的彩虹
extern void kbRGB_Int_RotatingRainbow(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);    // 旋转的彩虹
extern void kbRGB_Int_SpectrumCycling_Init(struct kbRGB_Int_Params *const params);              // 光谱骑自行车
extern void kbRGB_Int_SpectrumCycling(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);    // 光谱骑自行车

/*************************************************************************************************\
|        Random [2]                                                                               |
\*************************************************************************************************/
//effect =  new Bloom();                  // 花朵
//effect = new Lightning();               // 闪电
extern void kbRGB_Int_Bloom_Init(struct kbRGB_Int_Params *const params);                                             // 花朵
extern void kbRGB_Int_Bloom(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);              // 花朵
extern void kbRGB_Int_Lightning_Init(struct kbRGB_Int_Params *const params);                                         // 闪电
extern void kbRGB_Int_Lightning(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);          // 闪电

/*************************************************************************************************\
|        Simple [11]                                                                              |
\*************************************************************************************************/
//effect = new Breathing();               // 呼吸
//effect = new BreathingCircle();         // 呼吸循环
//effect = new Comet();                   // 彗星
//effect = new Fill();                    // 充满
//effect = new Marquee();                 // 大天幕
//effect = new Mosaic();                  // 马赛克
//effect = new MotionPoint();             // 运动点
//effect = new MotionPoints();            // 运动点
//effect = new Stack();                   // 堆
//effect = new Swap();                    // 交换
//effect = new Visor();                   // 遮阳板
extern void kbRGB_Int_Breathing_Init(struct kbRGB_Int_Params *const params);          // 呼吸
extern void kbRGB_Int_Breathing(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);          // 呼吸
extern void kbRGB_Int_BreathingCircle_Init(struct kbRGB_Int_Params *const params);    // 呼吸循环
extern void kbRGB_Int_BreathingCircle(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);    // 呼吸循环
extern void kbRGB_Int_Comet_Init(struct kbRGB_Int_Params *const params);              // 彗星
extern void kbRGB_Int_Comet(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);              // 彗星
extern void kbRGB_Int_Fill_Init(struct kbRGB_Int_Params *const params);               // 充满
extern void kbRGB_Int_Fill(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);               // 充满
extern void kbRGB_Int_Marquee_Init(struct kbRGB_Int_Params *const params);            // 大天幕
extern void kbRGB_Int_Marquee(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);            // 大天幕
extern void kbRGB_Int_Mosaic_Init(struct kbRGB_Int_Params *const params);             // 马赛克
extern void kbRGB_Int_Mosaic(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);             // 马赛克
extern void kbRGB_Int_MotionPoint_Init(struct kbRGB_Int_Params *const params);        // 运动点
extern void kbRGB_Int_MotionPoint(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);        // 运动点
extern void kbRGB_Int_MotionPoints_Init(struct kbRGB_Int_Params *const params);       // 运动点
extern void kbRGB_Int_MotionPoints(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);       // 运动点
extern void kbRGB_Int_Stack_Init(struct kbRGB_Int_Params *const params);              // 堆
extern void kbRGB_Int_Stack(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);              // 堆
extern void kbRGB_Int_Swap_Init(struct kbRGB_Int_Params *const params);               // 交换
extern void kbRGB_Int_Swap(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);               // 交换
extern void kbRGB_Int_Visor_Init(struct kbRGB_Int_Params *const params);              // 遮阳板
extern void kbRGB_Int_Visor(const uint16_t cols, const uint16_t rows, const uint8_t speed, const int reverse, struct kbRGB_Int_Params *const params);              // 遮阳板

#ifdef __cplusplus
}
#endif

#endif   // _KB_RGB_INT_EFFECT_H_
